package com.eliza.save.activity

import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.eliza.library.tools.file.FileTools
import com.eliza.library.tools.InfoTools
import com.eliza.library.tools.PermissionUtils
import com.eliza.save.R
import java.io.*


/*
* 外部存储是指将文件存储到一些外部存储设备上。例如 SD 卡或者设备内嵌的存储卡，属于永久性的存储方式。
外部存储的文件不被某个应用程序所特有，可以被其他应用程序共享，当将该外部存储设备连接到计算机上时，这些文件可以被浏览、修改和删除。因此，这种存储方式不具有安全性。
由于外部存储器可能处于被移除、连接到计算机、丢失、只读或者其他各种状态，
* 因此在使用外部存储之前，必须使用 Environment.getExternalStorageState() 方法来确认外部存储器是否可用。
* */
class OutSaveActivity : AppCompatActivity() {
    private val context = this

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_out_save)


        val tv_show = findViewById<TextView>(R.id.outSave_textView_show);
        val accout = findViewById<EditText>(R.id.outSave_editText_accout);
        val pwd = findViewById<EditText>(R.id.outSave_editText_pwd);


        val filepath = ""
        val fileName = "IIIInfo.txt"
        val getP = PermissionUtils.requestPermissions(//动态获取权限
            context,
            arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE)
        )
        if (getP) {
            val info = "accout：${accout.text} pwd:${pwd.text}"
            findViewById<Button>(R.id.outSave_write_btn).setOnClickListener {//绑定btn 并进行事件监听
                InfoTools.LogTools(this, "sava GET Permission")
                saveFile(filepath, fileName, info.toByteArray())
            }
            findViewById<Button>(R.id.outSave_read_btn).setOnClickListener {
                InfoTools.LogTools(this, "sava GET Permission")
                tv_show.text = String(readFile(filepath, fileName))
                InfoTools.ToastTools(context, "读取的文件内容${tv_show.text}")
            }
        } else {
            InfoTools.ToastTools(context, "为未获取必要权限！！")
        }
    }
    //    通过调用getExternalFilesDir()获取仅由你的应用程序使用的目录
    /**
     * Save file
     * @param filepath 文件路径
     * @param fileName 文件全名
     * @param info 要存储的信息
     */
    fun saveFile(filepath: String, fileName: String, info: ByteArray) {
        if (FileTools.isExternalStorageReadable() && FileTools.isExternalStorageWritable()) {
            FileOutputStream(
                File(
                    /*1.Environment.getExternalStorageDirectory()
                    //获取到的目录是/storage/emulated/0,这个也是外部存储的根目录。*/
                    "${Environment.getExternalStorageDirectory()}/$filepath", fileName
                )
            ).use {
                it.write(info)
            }
        }
    }

    /**
     * Read file
     * @param filepath 文件路径
     * @param fileName 文件全名
     * @return 字节数组
     */
    fun readFile(filepath: String, fileName: String): ByteArray {
        if (FileTools.isExternalStorageReadable() && FileTools.isExternalStorageWritable()) {
            val fis =
                FileInputStream("${Environment.getExternalStorageDirectory()}/$filepath/$fileName")
            val byteArray = ByteArray(fis.available())
            fis.read(byteArray);
            InfoTools.LogTools(this::class.java.name, "info:${String(byteArray)}");
            return byteArray
        } else {
            InfoTools.ToastTools(context, "readFile::为未获取必要权限！！")
            return byteArrayOf()
        }
    }


}